#!/usr/bin/env ruby
# frozen_string_literal: true

require 'optparse'
require_relative '../lib/shell'
require_relative '../lib/loadenv'

steps = {
  shell: true,
  args: true,
  env: :project
}

OptionParser.new do |opts|
  opts.banner = '本命令打印相关的环境变量'

  opts.on('', '--[no-]shell', '测试 Shell 命令回显效果') do |executed|
    steps[:shell] = executed
  end

  opts.on('', '--[no-]args', '打印参数') do |executed|
    steps[:args] = executed
  end

  opts.on('', '--project-env', '仅打印项目使用的系统环境变量') do |executed|
    steps[:env] = :project
  end

  opts.on('', '--system-env', '打印所有的系统环境变量') do |executed|
    steps[:env] = :system
  end

  opts.on('-a', '--all', '执行所有步骤') do |executed|
    steps = steps.map do |key, value|
      [key, true]
    end.to_h
  end
end.parse!

puts '本脚本用于测试 setup-env 命令是否正常执行'
puts

if steps[:shell]
  shell.exec 'echo "首先测试 Shell 命令回显"'
  puts
end

if steps[:args]
  puts '打印参数列表：'
  if ARGV.empty?
    puts '无'
  else
    ARGV.each do |arg|
      puts "  #{arg}"
    end
  end
  puts
end

case steps[:env]
when :project
  puts '打印项目需要的系统环境变量：'
  env = LoadEnv.load_from_file(File.join(__dir__, '../.setup-env'))
  env.each_key do |key|
    puts "  #{key}=#{ENV[key]}"
  end
when :system
  puts '打印所有的系统环境变量：'
  ENV.each do |key, value|
    puts "  #{key}=#{ENV[key]}"
  end
end
